package com.jfirer.validator.path.api;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import javax.validation.ElementKind;
import javax.validation.Path;
import javax.validation.Path.Node;

public interface ConnectionNode
{
    
    /**
     * 以当前节点为前置节点新建一个节点，并且返回该节点
     * 
     * @return
     */
    ConnectionNode next();
    
    /**
     * 设置当前节点的名称
     * 
     * @param name
     */
    ConnectionNode setName(String name);
    
    /**
     * 如果当前节点是一个数组元素，设置其Index
     * 
     * @param index
     */
    ConnectionNode setIndex(Integer index);
    
    /**
     * 如果当前节点是一个Map元素，设置其Key
     * 
     * @param key
     */
    ConnectionNode setKey(Object key);
    
    /**
     * 设置其elementKind
     * 
     * @param elementKind
     */
    ConnectionNode setElementKind(ElementKind elementKind);
    
    /**
     * 如果该节点是一个方法节点，设置其Method对象
     * 
     * @param method
     */
    ConnectionNode setMethod(Method method);
    
    /**
     * 如果该节点是一个构造方法节点，设置其构造方法对象
     * 
     * @param constructor
     */
    ConnectionNode setConstructor(Constructor<?> constructor);
    
    /**
     * 如果该方法是一个方法参数节点，设置其方法参数下标
     * 
     * @param parameterIndex
     */
    ConnectionNode setParameterIndexAndName(Integer parameterIndex, String parameterName);
    
    ConnectionNode setInIterable(boolean inIterable);
    
    /**
     * 返回该节点的前置节点
     * 
     * @return
     */
    ConnectionNode pred();
    
    Node asNode();
    
    Path toPath();
    
}
